import * as getters from './getters'
import * as actions from './actions'
import mutations from './mutations'

// const 声明 一个常量才不会导致每次刷新会改变 store 的值
const state = {
  cti: {}, // 软电话条其他数据
  phoneQueuesChange: {random: 0}, // 技能组发生变化时，重新计算并渲染监控的数据
  serviceNoChange: {random: 0}, // 服务号发生变化时，重新计算并渲染监控的数据
  peersChange: {random: 0}, // 坐席状态发生变化时，重新计算并渲染监控的数据
  currentCustInfo: {}, // 当前通话的客户信息
  globalLet: {// 全局变量
    autoHangupList: [], // 三方通话接口返回的列表，可用于发起方对客户或被咨询方的挂断
    isCalling: false, // 通话中的标识，ring是true，挂断就是false
    isLabelShow: false, // 通话标签展示的标识，用于卡片中是否展示标签组件的标识，挂断就是false
    riskDialog: false, // 风控提醒弹窗
    riskData: {}, // 风控数据
    isShowCancleCounsultBtn: false, // 是否显示取消咨询的按钮
    callInFlag: false, // 来电的标识
    valOfIvrMenuDialog: false, // VAL_OF_IVR_MENU 转ivr菜单变量弹窗
    callBySipOrGetway: '', // sip话机或者是软电话上外呼的号码
    _cti_allAgentStatus: [], // 获取所有坐席状态，每个坐席当前是否空闲
    currentCallUpHandup: {id: '', status: 'handUp', channel: ''}, // 来电之后接起或者是挂断，用于来电添加备注
    queueNumber: 0, // 所在技能组通话排队总数
    undealNum: 0, // 小铃铛未读数
    callScreen: '', // 外呼弹屏对接url
    timingOrCountDown: '', // 软电话条正计时还是倒计时
    callCustomerDetail: {}, // 外呼弹屏的当前客户对象，未知客户or多个客户or一个客户
    screenCallSheetId: '', // 当前外呼弹屏中的通话id,用于新增客户or更新客户or合并客户
    outboundScreenCallSheetId: '', // 去电tab当前通话中的id,挂断电话会清空
    callFlag: false, // 当前外呼弹屏的标志，用于是否出现外呼弹屏
    limits: 0, // 监控呼入并发上限数
    phone_data: {},
    transferData: '',
    _cti_url: '',  // 当前账号所在的pbx配置里的url
    _cti_currentState: 0, // 当前电话条状态的下标 和 _cti_stateDescription 结合使用
    _cti_preState: 0, // 经搜索好像光有赋值，没有使用的地方，待确认
    _cti_unregister: 0, // 未连接
    _cti_peerstate: 1, // 空闲
    _cti_dialing: 2, // 呼叫中
    _cti_innerDialing: 3, // 呼叫中
    _cti_belling: 4, // 来电振铃
    _cti_innerBelling: 5, // 来电振铃
    _cti_listening: 6, // 监听振铃
    _cti_talking: 7, // 普通通话
    _cti_threeWayTalking: 8, // 三方通话
    _cti_innerTalking: 9, // 内部通话
    _cti_dialTalking: 10, // 外呼通话
    _cti_listened: 11, // 监听中
    _cti_transferBelling: 12, // 转接振铃
    _cti_transferDialing: 13, // 转接振铃
    _cti_transfer: 14, // 转接通话
    _cti_dialoutTransfer: 15, // 外呼转接通话
    _cti_hold: 16, // 保持
    _cti_systemBusy: 99, // 系统置忙 eg: 后处理
    _cti_stateBeforeHold: '',  // 记住保持通话前的状态，恢复通话时清空
    _cti_extenState: '', // 电话条状态为consultTalking、talking、threeWayTalking时控制icon的展示
    // 转接或者是咨询后的等待ing
    waitSate: {
      Exten: '',
      isTransfer: false,
      time: ''
    },
    showTransferCancelDialog: false, // 转接或咨询的等待ing弹窗
    showTransferDialog: false, // 是否展示转接弹窗
    showConsultDialog: false, // 是否展示咨询弹窗
    calleeArea: '', // 电话条号码归属地
    callingNum: '', // 电话条外呼正在通话中的号码
    callScreenCallingNum: false, // 外呼弹屏中用的正在通话中的号码，和电话条中显示callingNum断开关联
    _cti_stateDescription: ['unregister', 'peerstate', 'dialing', 'innerDialing', 'belling', 'innerBelling', 'listening', 'talking', 'threeWayTalking', 'innerTalking', 'dialTalking', 'listened', 'transferBelling', 'transferDialing', 'transfer', 'dialTransfer', 'hold'],
    // phone_peers: {}, // 所有坐席的通话数据，主要是用于监控的数据展示
    // phone_queues: {}, // 所有技能组的使用情况
    // phone_serviceNos: {}, // 所有服务号的使用情况
    phone_accountCalls: {}, // 当前账户所在的pbx的通话数据
    _cti_isSettingbusy: false, // 电话条切换状态中的标记，防止多次请求
    _cti_isRelogin: false,  // 电话条是否断网重连，避免重连action还没返回又再次重连
    _cti_showNumber: false, // 软电话条是否显示号码
    _cti_extenType: '', // 登录方式（gateway、sip、Local）
    phone_pbxs: {}, // 当前账户所在的pbx的配置信息
    _phone_callObject: {}, // 当前通话中的通话数据
    _cti_isInvestigatting: false, // 电话条转满意度中，避免action还没返回又再次发送action
    _cti_ui_countTimer: 0, // 电话条上的计时是否要重新计时或者是变成倒计时的标志
    _cti_ui_calculagraph: '', // 电话条计时，临时存储的定时器值，若是新增一个定时器的时候清除之前的
    _cti_ui_dialogBoxRemain: 40000, // 转接或咨询ing时间计时，若是超过40s自动关闭弹窗
    _cti_ui_notifyDialogInterval: '', // 存储转接或咨询ing计时的定时器
    _cti_ui_all_queue_obj: {}, // 坐席所有所在技能组的排队数
    _cti_ui_last_state: '', // 临时存储电话条的状态（当前的状态eg:  talking、innerBelling等）
    mtime: '00:00:00', // 电话条上展示的时间
    busyType: '', // 当前展示的电话条繁忙状态（下拉中列表中不会有当前已选的项）
    busyTypeName: {}, // 所有电话条状态配置的名字
    // 这部分有变动,需要同步下监控
    _cti_ui_desc: {
      unregister: '未连接',
      peerstate: '空闲',
      dialing: '呼叫中',
      innerDialing: '呼叫中',
      belling: '来电振铃',
      innerBelling: '来电振铃',
      listening: '监听振铃',
      talking: '普通通话',
      threeWayTalking: '三方通话',
      innerTalking: '内部通话',
      dialTalking: '外呼通话',
      listened: '监听中',
      hold: '保持',
      consultTalking: '普通通话',
      dialTransfer: '外呼转接通话',
      transfer: '转接通话',
      offline: '离线接听',
      ready: '签出',
      transferBelling: '转接振铃',
      transferDialing: '转接振铃'
    },
    _cti_phoneBar_state: { // 各个状态下可以显示icon
      unregister: { // 未连接
        dialout: false,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true
      },
      peerstate: { // 空闲
        dialout: true,
        transfer: false,
        hold: false,
        threeway: false,
        consult: false,
        sms: true,
        ivrMenu: false
      },
      dialing: { // 呼叫中
        hangup: true,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true,
        setCallLabel: true
      },
      innerDialing: { // 呼叫中
        hangup: true,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true
      },
      belling: { // 来电振铃
        dialout: false,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true
      },
      innerBelling: { // 来电振铃
        dialout: false,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true
      },
      transferBelling: { // 转接振铃
        dialout: false,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true,
        transferReason: true
      },
      transferDialing: { // 转接振铃
        dialout: false,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true,
        transferReason: true
      },
      listening: { // 监听振铃
        hangup: true,
        sms: true
      },
      talking: { // 普通通话
        hangup: true,
        transfer: true,
        hold: true,
        threeway: false,
        ivrMenu: true,
        consult: true,
        Investigate: true,
        sms: true,
        setCallLabel: true
      },
      threeWayTalking: { // 三方通话
        hangup: true,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true,
        setCallLabel: true,
        autoHangup: true
      },
      innerTalking: { // 内部通话
        hangup: true,
        transfer: false,
        hold: false,
        threeway: false,
        sms: true
      },
      dialTalking: { // 外呼通话
        hangup: true,
        transfer: true,
        ivrMenu: true,
        hold: true,
        threeway: false,
        consult: true,
        Investigate: true,
        sms: true,
        setCallLabel: true
      },
      listened: { // 监听中
        hangup: true,
        sms: true
      },
      hold: { // 保持
        dialout: false,
        recover: true,
        transfer: false,
        threeway: false,
        sms: true
      },
      consultTalking: { // 普通通话
        consultThreeWayCall: true,
        consultTransfer: true,
        stopConsult: true,
        hangup: true,
        sms: true,
        setCallLabel: true
      },
      transfer: { // 转接通话
        hangup: true,
        hold: true,
        transfer: true,
        consult: true,
        Investigate: true,
        ivrMenu: true,
        sms: true,
        threeway: false,
        setCallLabel: true,
        transferReason: true
      },
      dialTransfer: { // 外呼转接通话
        hangup: true,
        hold: true,
        transfer: true,
        consult: true,
        Investigate: true,
        ivrMenu: true,
        sms: true,
        threeway: false,
        setCallLabel: true,
        transferReason: true
      },
      currentCallSheetId: '' // 当前通话中的通话id
    },
    lockd_state: {  // 设置退出锁 防止退出请求延迟 发起重登请求
      logoff: false
    },
    ass_new_features: false,
    ass_current_new_features: false,
    work_number_binding_status: false // 工号是否绑定状态
  }
}
export default {
  state,
  getters,
  actions,
  mutations
}

